package call

import (
	"fmt"
	"github.com/nick/vdamtools/pkg/loggerv"
	"github.com/robfig/cron/v3"
	"go.uber.org/zap"
	"math/rand"
	"strconv"
)

func Start() {
	c := cron.New(cron.WithSeconds()) // 初始化一个新的cron实例，并启用秒级别的配置

	// 添加任务，"* * * * * *" 表示每秒钟执行一次，我们通过在第一位使用 */10 来表示每10秒执行一次
	_, err := c.AddFunc("*/20 * * * * *", func() {
		generalLogger := loggerv.GetLogger()
		//fmt.Println("Task executed at", time.Now().Format("15:04:05"))
		generalLogger.Info("This is a general log message.")

		activeDevices := rand.Perm(10)[:3] // 从30000个设备中随机选择10000个
		for _, deviceID := range activeDevices {
			dLogger := loggerv.GetDeviceLogger("dev" + strconv.Itoa(deviceID))
			dLogger.Info("Device log", zap.String("deviceID", strconv.Itoa(deviceID)))
			dLogger.Info("Device report", zap.String("deviceID", strconv.Itoa(deviceID)))
		}
	})
	if err != nil {
		fmt.Println("Error adding function to cron:", err)
		return
	}

	c.Start() // 开始cron调度器

	// 通常情况下，服务会持续运行，这里为了演示，我们让主程序阻塞运行
	select {} // 阻塞主线程，避免程序退出
}
